Testing of software is costly and time-consuming. Some software flaws manifest themselves only when a specific processor or operating system is used, while remaining dormant otherwise. Such software flaws are in part brought about by semantic factors related to the implementation of operating systems and processors that execute the software. Detecting software flaws of this variety may be especially difficult.
Executing a software application in every possible operating system or processor architecture to test for the presence of software bugs that are specific to that architecture may be cost-prohibitive. Analyzing high-level source code alone may expose logical flaws in the source code, but it may fail to account, in a cost-efficient manner, for errors that appear only when specific operating system or processor is used. In some circumstances, to account for a specific operating system or processor architecture, one may have to delve into the representation of the source code at the machine level and analyze assembly code that is compiled for that operating system or processor.